package com.weavernorth.attendance;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
import weaver.general.Util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;


/**
 * @program: ecology_erdos
 * @description: 补发年假sql类
 * @author: zm
 * @create: 2019-12-24 09:34
 **/


public class AnnualLeaveUtilbak extends BaseBean {
    public static Log log = LogFactory.getLog(AnnualLeaveUtilbak.class.getName());

    /**
     * 得到工领及计算补发年假时长
     *
     * @param strUserid 用户id  strTenYear参加工作满10年日期
     *                  strTenYear参加工作满20年日期 strJoinDate首次参加工作日期 douWorkYear工龄
     */

    public Double getAnnualLeaveTime(String strUserid, String strTenYear, String strTwentyYear,String strJoinDate,Double douWorkYear) {
        log.info("进入计算补发年假时长,人员:"+strUserid+",参加工作满10年日期:"+strTenYear+",满20年日期:"+strTwentyYear+",首次参加工作:"+strJoinDate+",工龄:"+douWorkYear);
        //数据库操作
        RecordSet rs = new RecordSet();
        //基础类
        BaseBean bb = new BaseBean();
        //返回年假天数
        Double douYearDays = 0.0;
        //获取多长时间补发年假
        int intWorkMonth = Util.getIntValue(bb.getPropValue("annualMess", "annLeaveTime"));
        //满1年不满10年的年假天数
        int intTen = Util.getIntValue(bb.getPropValue("annualMess", "firstDay"));
        //满10年不满20年的年假天数
        int intTwenty = Util.getIntValue(bb.getPropValue("annualMess", "secondDay"));
        //满20年的年假天数
        int intMoreTwenty = Util.getIntValue(bb.getPropValue("annualMess", "thirdDay"));
        //获取当前时间
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        String strCurr = dateFormat.format(new Date());
            //工领满1年,不满10年的
            if (douWorkYear >= 1 && douWorkYear < 10) {
                douYearDays = (double) intTen * intWorkMonth / 365;
                log.info("工龄满1年不满10年的年假天数:" + douYearDays);
            }
            //工龄满10年不满20年的
           else if (douWorkYear >= 10 && douWorkYear < 20) {
                //判断满10年的时间点,当满10年的时间点小于当前日期,则满10年到入职时间的时间段按照 1-10年的年假天数计算,
                // 满10年的日期到当前日期按照10-20的年假天数计算
                if (!"".equals(strTenYear) && strTenYear.compareTo(strCurr) <0&&strTenYear.compareTo(strJoinDate)> 0) {
                    //得到满10年的日期和入职日期相差天数
                  int intDiffDay=differentDayMillisecond(strJoinDate,strTenYear);
                  //此时按照1-10年的年假天数计算
                    douYearDays=(double)intDiffDay/365*intTen;
                    //得到当前日期和满10年日期的相差天数
                    int intDiffDayCurr=differentDayMillisecond(strTenYear,strCurr);
                    //此时按照10-20年的年假天数计算
                    douYearDays=douYearDays+(double)intDiffDayCurr/365*intTwenty;
                    log.info("工龄在当前日期前满10年得到的补的年假天数:"+douYearDays);
                }else{
                    douYearDays=(double)intTwenty*intWorkMonth/365;
                    log.info("工龄满10年不满20年得到的年假天数:"+douYearDays);
                }
            }

            //工龄大于等于20年时
            else if(douWorkYear>=20){

                //判断满20年的时间点,当满20年的时间点小于当前日期,则满20年到入职时间的时间段按照 1-10年的年假天数计算,
                // 满10年的日期到当前日期按照10-20的年假天数计算
                if (!"".equals(strTwentyYear) && strTwentyYear.compareTo(strCurr) < 0&&strTwentyYear.compareTo(strJoinDate)<0) {
                    //得到满10年的日期和入职日期相差天数
                    int intDiffDay=differentDayMillisecond(strJoinDate,strTwentyYear);
                    //此时按照10-20年的年假天数计算
                    douYearDays=(double)intDiffDay/365*intTwenty;
                    //得到当前日期和满20年日期的相差天数
                    int intDiffDayCurr=differentDayMillisecond(strTwentyYear,strCurr);
                    //此时按照10-20年的年假天数计算
                    douYearDays=douYearDays+(double)intDiffDayCurr/365*intMoreTwenty;
                    log.info("工龄在当前日期前满20年得到的补的年假天数:"+douYearDays);
                }else{
                    douYearDays=(double)intMoreTwenty*intWorkMonth/365;
                    log.info("工龄满20年得到的年假天数:"+douYearDays);
                }

            }



        return douYearDays;

    }

    /**
     * 计算两个时间字段相差的天数
     */

    public static int differentDayMillisecond(String strDateBegin, String strDateEnd) {
        SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
        SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd");
        int day = 0;
        try {
            Date dateBegin = format1.parse(strDateBegin);
            Date dateEnd = format2.parse(strDateEnd);
            day = (int) ((dateEnd.getTime() - dateBegin.getTime()) / (3600 * 1000 * 24));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return day;
    }

}
